[info] 思路1
题目的大意是给定n个门,从1开始遍历到n,设当前第i次遍历,那么每个i个门就进行操作 若门是关闭的就打开门,若门是打开的就关闭门。 不妨设一个长度为n的boolean数组,用true和false表示开闭 从1循环到n,每次对门的处理就取反 最后遍历门数组就得到值为true就是打开门的个数
代码实现
#include<stdio.h>
int main() {
int n,opendoors = 0;
scanf("%d",&n);
bool doors[n];
for(int index = 0; index<n; index++) {
doors[index] = 1;
}
for(int i =2; i<=n; i++) {
for(int j = i; j<=n; j+=i) {
doors[j-1] = !doors[j -1];
}
}
for(int index = 0; index<n; index++) {
if(doors[index] == 1) {
opendoors ++;
}
}
printf("%d\n",opendoors);
return 0;
}
[info] 思路2
根据模拟程序,会发现打开门的数量sqrt(n)